package com.own.component.common.base.service.hook;

import com.own.component.common.base.entity.po.BaseBean;
import com.own.component.common.base.entity.vo.BaseBeanVo;

import java.util.List;

/**
 * BaseAddHook
 *
 * @author chenxueli
 * @date 2022-06-15 03:14:15
 */
public interface BaseAddHook<PO extends BaseBean, VO extends BaseBeanVo<PO>> extends BaseCheckHook<PO, VO> {

    /**
     * 新增数据之前
     *
     * @param po po对象
     * @return 处理后的po对象
     */
    default PO beforeAdd(PO po) {
        var fun = checkBeforeAdd();
        if (fun == null) {
            return po;
        }
        return fun.apply(po);
    }

    /**
     * 新增数据之前
     *
     * @param poList po列表对象
     * @return 处理后的po对象
     */
    default List<PO> beforeAdd(List<PO> poList) {
        var fun = checkBeforeAdd();
        if (fun == null) {
            return poList;
        }
        return poList.stream().map(fun).toList();
    }

    /**
     * 新增数据之后
     *
     * @param vo vo对象
     * @return 处理后的vo对象
     */
    default VO afterAdd(VO vo) {
        var fun = checkAfterAdd();
        if (fun == null) {
            return vo;
        }
        return fun.apply(vo);
    }

}
